const { AdminModel } = require('../../models/index')
const passwordUtils = require('../../utils/passwordUtils')

// 提交管理员信息
const submitAdminInfo = async (req, res) => {
  try {
    // 个人信息为空的情况
    if (!req.body) {
      return res.status(400).json({ error: '个人信息不能为空！' })
    }

    // 使用正则表达式验证手机号和邮箱
    const phoneRegex = /^(?:(?:\+|00)86)?1[3-9]\d{9}$/
    const emailRegex = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
    if (!phoneRegex.test(req.body.phone)) {
      throw new Error('请输入正确的手机号码')
    }
    if (!emailRegex.test(req.body.email)) {
      throw new Error('请输入正确的电子邮箱')
    }

    //  根据管理员ID找到记录
    const admin = await AdminModel.findByPk(req.body.id)
    if (!admin) {
      return res.status(404).json({ error: '管理员不存在，请重新注册登录！' })
    }

    // 更新管理员记录中的手机号和邮箱和头像
    const updateUser = await admin.update({
      phone: req.body.phone,
      email: req.body.email,
      avatar: req.body.avatar
    })

    const updateResponse = {
      phone: updateUser.phone,
      email: updateUser.email,
      avatar: updateUser.avatar
    }

    // 更新成功的响应
    res.status(200).json({
      title: '更新成功',
      message: updateResponse
    })


  } catch (error) {
    return res.status(500).json({ error: error.message })
  }
}

// 获取管理员信息
const getAdminInfo = async (req, res) => {
  try {
    const id = req.params.id

    // 管理员ID不存在的情况
    if (!id || isNaN(parseInt(id, 10))) {
      return res.status(400).json({ error: '无效的管理员ID' })
    }

    // 查找管理员ID查找相关信息
    const AdminInfo = await AdminModel.findByPk(id)

    // 没有找到管理员记录的情况
    if (!AdminInfo) {
      return res.status(404).json({ error: '管理员不存在，请重新注册登录！' })
    }

    // 返回管理员信息查找成功时的响应
    res.status(200).json({
      title: '查询成功',
      data: {
        id: AdminInfo.id,
        username: AdminInfo.username,
        phone: AdminInfo.phone,
        email: AdminInfo.email,
        avatar: AdminInfo.avatar
      }
    })
  } catch (error) {
    return res.status(500).json({ error: error.message })
  }
}

// 修改管理员密码
const changeAdminPwd = async (req, res) => {
  try {
    // 获取管理员ID
    const id = req.params.id

    // 管理员ID不存在的情况
    if (!id || isNaN(parseInt(id, 10))) {
      return res.status(400).json({ error: '无效的管理员ID' })
    }

    // 查找管理员ID查找相关信息
    const AdminInfo = await AdminModel.findByPk(id)

    // 没有找到管理员记录的情况
    if (!AdminInfo) {
      return res.status(404).json({ error: '管理员不存在，请重新注册登录！' })
    }

    // 从请求体里获取旧密码和新密码
    const { oldPassword, newPassword } = req.body

    // 检查是否提供了旧密码和新密码
    if (!oldPassword || !newPassword) {
      return res.status(400).json({ error: '请提供旧密码和新密码！' })
    }

    // 新旧密码一致的情况
    if (oldPassword === newPassword) {
      return res.status(400).json({ error: '旧密码和新密码不能一致！' })
    }

    // 使用正则表达式验证输入的密码
    const passwordRegex = /^\S{6,15}$/  //匹配6-15位非空白字符
    if (!passwordRegex.test(oldPassword) || !passwordRegex.test(newPassword)) {
      throw new Error('密码必须是6-15位的非空字符')
    }

    // 验证旧密码是否正确
    const isMatch = await passwordUtils.checkPassword(oldPassword, AdminInfo.password)
    if (!isMatch) {
      return res.status(400).json({ error: '旧密码不正确！' })
    }

    // 处理加密输入的新密码
    const hashNewPassword = await passwordUtils.hashPassword(newPassword)

    // 更新密码
    const updateAdminPassword = await AdminModel.update({ password: hashNewPassword }, {
      where: {
        id: id
      }
    })

    // 密码修改成功的响应
    res.status(200).json({
      title: '修改成功',
      message: '修改管理员密码成功！'
    })
  } catch (error) {
    return res.status(500).json({ error: error.message })
  }
}


module.exports = {
  submitAdminInfo,
  getAdminInfo,
  changeAdminPwd
}